package com.tbit.uqbike.client.service;

import com.tbit.uqbike.client.pojo.InvoiceRecord;
import com.tbit.uqbike.client.pojo.Result;
import com.tbit.uqbike.client.pojo.dto.AddInvoiceRecordDTO;
import com.tbit.uqbike.client.pojo.dto.ReOpenDTO;
import com.tbit.uqbike.client.pojo.dto.ReOpenEditInvoiceRecordDTO;
import com.tbit.uqbike.client.pojo.dto.ReOpenInvoiceRecordDTO;
import com.tbit.uqbike.client.pojo.vo.InvoiceCardLogVO;
import com.tbit.uqbike.client.pojo.vo.InvoiceRideLogVO;

import java.util.Date;
import java.util.List;

/**
 * 发票
 *
 * @Author:BUGTian
 * @DATE: 2023/8/29
 */
public interface InvoiceRecordService {
    /**
     * 查询开票信息（骑行订单）
     *
     * @param token     用户token
     * @param startTime 起始时间
     * @param endTime   终止时间
     * @param minMoney  最低价(单位：分)
     * @param maxMoney  最高价(单位：分)
     * @return
     */
    Result<List<InvoiceRideLogVO>> queryInvoiceRideLog(String token, Date startTime, Date endTime, Long minMoney, Long maxMoney);

    /**
     * 查询开票信息（套餐订单）
     *
     * @param token        用户token
     * @param startTime    起始时间
     * @param endTime      终止时间
     * @param minMoney     最低价(单位：分)
     * @param maxMoney     最高价(单位：分)
     * @param rechargeType 订单类型（1:免押卡 2:骑行卡 4:会员卡 5:优惠券套餐）
     * @return
     */
    Result<List<InvoiceCardLogVO>> queryInvoiceCardLog(String token, Date startTime, Date endTime, Long minMoney, Long maxMoney, Integer rechargeType);

    /**
     * 开票
     *
     * @param token
     * @param addInvoiceRecordDTO
     * @return
     */
    Result addInvoiceRecord(String token, AddInvoiceRecordDTO addInvoiceRecordDTO);

    /**
     * 查询开票历史
     *
     * @param token
     * @return
     */
    Result<List<InvoiceRecord>> queryInvoiceRecord(String token);

    /**
     * 根据发票历史id查询骑行订单详情
     *
     * @param token
     * @param id
     * @return
     */
    Result<List<InvoiceRideLogVO>> getRideLogById(String token, Integer id);

    /**
     * 根据发票历史id查询套餐订单详情
     *
     * @param token
     * @param id
     * @return
     */
    Result<List<InvoiceCardLogVO>> getCardLogById(String token, Integer id);

    /**
     * 查询可申请重开订单（重新选择订单）
     *
     * @param token
     * @param id
     * @param orderType
     * @param startTime
     * @param endTime
     * @param minMoney
     * @param maxMoney
     * @param rechargeType
     * @return
     */
    Result<Object> canReopenInvoiceRecord(String token, Integer id, Integer orderType, Date startTime, Date endTime, Long minMoney, Long maxMoney, Integer rechargeType);

    /**
     * 重开发票（重新选择订单）
     *
     * @param token
     * @param reOpenInvoiceRecordDTO
     * @return
     */
    Result reOpenInvoiceRecord(String token, ReOpenInvoiceRecordDTO reOpenInvoiceRecordDTO);

    /**
     * 重开发票（修改发票信息）
     *
     * @param token
     * @param reOpenEditInvoiceRecordDTO
     * @return
     */
    Result reOpenEditInvoiceRecord(String token, ReOpenEditInvoiceRecordDTO reOpenEditInvoiceRecordDTO);

    /**
     * 申请重发
     *
     * @param token
     * @param email
     * @param id
     * @return
     */
    Result reSend(String token, String email, Integer id);

    /**
     * 修改邮箱
     *
     * @param token
     * @param email
     * @param id
     * @return
     */
    Result editEmail(String token, String email, Integer id);

    /**
     * 重开发票
     *
     * @param token
     * @param reOpenDTO
     * @return
     */
    Result reOpenInvoiceRecordNew(String token, ReOpenDTO reOpenDTO);
}
